

#pragma once
#include <stdint.h>
#include "IRenderWindow.h"

namespace FlameEngine
{
	enum EngineCommandType :uint16_t
	{
		ect_none = 0,
		ect_createWnd,
		ect_lastCmd
	};

	class IEngineCommand
	{
	public:
		IEngineCommand(){};
		virtual ~IEngineCommand(){}
		virtual void Execute() {};
		virtual EngineCommandType GetCmdType() = 0;
		virtual bool IsExecutable() = 0;

		IEngineCommand(IEngineCommand&) = delete;
		IEngineCommand& operator= (IEngineCommand&) = delete;
	};

	class EmptyCmd:public IEngineCommand
	{
	public:
		EngineCommandType GetCmdType() { return ect_none; }
		bool IsExecutable() { return false; }
	};

	
	class CreateWndCmd :public IEngineCommand
	{
	public:
		WindowStyleFlag style;
		int32_t posX;
		int32_t posY;
		uint32_t clientWidth;
		uint32_t clientHeight;
		uint32_t minClientWidth;
		uint32_t minClientHeight;
		char titleName[256];
		char appName[256];
		bool allowUserResize;

		EngineCommandType GetCmdType() { return ect_createWnd; }
		bool IsExecutable() { return false; }
	};
}
